package com.aidex.biz.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aidex.common.utils.log.annotation.FieldRemark;
import com.aidex.common.utils.log.annotation.LogField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.aidex.common.annotation.Excel;
import com.aidex.common.core.domain.BaseEntity;

/**
 * 还款信息对象 biz_loan_bill
 *
 * @author sean
 * @email 2074844820@qq.com
 * @date 2025-07-03
 */
@Data
public class LoanBill extends BaseEntity<LoanBill> {
    private static final long serialVersionUID = 1L;

    /**
     * 创建者
     */
    private String userId;

    /**
     * 创建部门
     */
    private String deptId;

    /**
     * 创建名称
     */
    private String userName;

    /**
     * 部门名称
     */
    private String deptName;

    /**
     * 公司ID
     */
    private String companyId;

    /**
     * 客户姓名
     */
    private String cusName;

    /**
     * 客户ID
     */
    private String customerId;

    /**
     * 进件ID
     */
    private String jinjianId;

    /**
     * 还款开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "还款开始日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date beginTime;

    /**
     * 还款开始日期开始
     */
    private String beginBeginTime;

    /**
     * 还款开始日期结束
     */
    private String endBeginTime;
    /**
     * 贷款方式
     */
    @Excel(name = "贷款方式", dictType = "back_type")
    private String loanType;

    /**
     * 到期日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "到期日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endTime;

    /**
     * 到期日期开始
     */
    private String beginEndTime;

    /**
     * 到期日期结束
     */
    private String endEndTime;
    /**
     * 还款日
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "还款日", width = 30, dateFormat = "yyyy-MM-dd")
    private Date payDate;

    /**
     * 还款日开始
     */
    private String beginPayDate;

    /**
     * 还款日结束
     */
    private String endPayDate;
    /**
     * 贷款月数
     */
    @Excel(name = "贷款月数")
    private Integer months;

    /**
     * 本金金额
     */
    @Excel(name = "本金金额")
    private BigDecimal principal;

    /**
     * 利率
     */
    @Excel(name = "利率")
    private BigDecimal lv;

    /**
     * 月供金额
     */
    @Excel(name = "月供金额")
    private BigDecimal monthPayment;

    /**
     * 总还款额
     */
    @Excel(name = "总还款额")
    private BigDecimal totalPayment;

    /**
     * 总利息
     */
    @Excel(name = "总利息")
    private BigDecimal totalInterest;

    /**
     * 是否逾期
     */
    @Excel(name = "是否逾期", dictType = "sys_yes_no")
    private Integer isOverdue;

    /**
     * 是否结清
     */
    @Excel(name = "是否结清", dictType = "sys_yes_no")
    private Integer isPayAll;

    /**
     * 逾期天数
     */
    @Excel(name = "逾期天数")
    private Long overdueDays;

    /**
     * 逾期说明
     */
    @Excel(name = "逾期说明")
    private String overdueRemark;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 状态（0正常 1 停用）
     */
    private String status;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getDeptId() {
        return deptId;
    }

    public void setDeptId(String deptId) {
        this.deptId = deptId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public String getCompanyId() {
        return companyId;
    }

    public void setCompanyId(String companyId) {
        this.companyId = companyId;
    }

    public String getCusName() {
        return cusName;
    }

    public void setCusName(String cusName) {
        this.cusName = cusName;
    }

    public String getCustomerId() {
        return customerId;
    }

    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }

    public String getJinjianId() {
        return jinjianId;
    }

    public void setJinjianId(String jinjianId) {
        this.jinjianId = jinjianId;
    }

    public Date getBeginTime() {
        return beginTime;
    }

    public void setBeginTime(Date beginTime) {
        this.beginTime = beginTime;
    }

    public String getLoanType() {
        return loanType;
    }

    public void setLoanType(String loanType) {
        this.loanType = loanType;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public Date getPayDate() {
        return payDate;
    }

    public void setPayDate(Date payDate) {
        this.payDate = payDate;
    }

    public Integer getMonths() {
        return months;
    }

    public void setMonths(Integer months) {
        this.months = months;
    }

    public BigDecimal getPrincipal() {
        return principal;
    }

    public void setPrincipal(BigDecimal principal) {
        this.principal = principal;
    }

    public BigDecimal getLv() {
        return lv;
    }

    public void setLv(BigDecimal lv) {
        this.lv = lv;
    }

    public BigDecimal getMonthPayment() {
        return monthPayment;
    }

    public void setMonthPayment(BigDecimal monthPayment) {
        this.monthPayment = monthPayment;
    }

    public BigDecimal getTotalPayment() {
        return totalPayment;
    }

    public void setTotalPayment(BigDecimal totalPayment) {
        this.totalPayment = totalPayment;
    }

    public BigDecimal getTotalInterest() {
        return totalInterest;
    }

    public void setTotalInterest(BigDecimal totalInterest) {
        this.totalInterest = totalInterest;
    }

    public Integer getIsOverdue() {
        return isOverdue;
    }

    public void setIsOverdue(Integer isOverdue) {
        this.isOverdue = isOverdue;
    }

    public Integer getIsPayAll() {
        return isPayAll;
    }

    public void setIsPayAll(Integer isPayAll) {
        this.isPayAll = isPayAll;
    }

    public Long getOverdueDays() {
        return overdueDays;
    }

    public void setOverdueDays(Long overdueDays) {
        this.overdueDays = overdueDays;
    }

    public String getOverdueRemark() {
        return overdueRemark;
    }

    public void setOverdueRemark(String overdueRemark) {
        this.overdueRemark = overdueRemark;
    }

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("userId", getUserId())
                .append("deptId", getDeptId())
                .append("userName", getUserName())
                .append("deptName", getDeptName())
                .append("companyId", getCompanyId())
                .append("cusName", getCusName())
                .append("customerId", getCustomerId())
                .append("jinjianId", getJinjianId())
                .append("beginTime", getBeginTime())
                .append("loanType", getLoanType())
                .append("endTime", getEndTime())
                .append("payDate", getPayDate())
                .append("months", getMonths())
                .append("principal", getPrincipal())
                .append("lv", getLv())
                .append("monthPayment", getMonthPayment())
                .append("totalPayment", getTotalPayment())
                .append("totalInterest", getTotalInterest())
                .append("isOverdue", getIsOverdue())
                .append("isPayAll", getIsPayAll())
                .append("overdueDays", getOverdueDays())
                .append("overdueRemark", getOverdueRemark())
                .append("sort", getSort())
                .append("status", getStatus())
                .append("remark", getRemark())
                .append("id", getId())
                .append("createBy", getCreateBy())
                .append("createDept", getCreateDept())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("updateIp", getUpdateIp())
                .append("version", getVersion())
                .append("delFlag", getDelFlag())
                .toString();
    }
}
